package com.example.novelweb.interceptor;

import com.example.novelweb.common.BaseResponse;
import com.example.novelweb.common.ErrorCode;
import com.example.novelweb.utils.UserHolder;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/* not be used */

// 部分拦截-> 在mvcConfig中设置匹配需要拦截的路径->使用@LoginCheck设置
public class LoginInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    // controller里并没有对应的请求时，该请求会被当成是对静态资源的请求。
    // 此时的handler就是 ResourceHttpRequestHandler.
    if(!(handler instanceof HandlerMethod)) {
      return true;
    }

    // 判断是否在匹配的拦截路径中
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    // 获取注解
    LoginCheck loginCheck = handlerMethod.getMethod().getAnnotation(LoginCheck.class);
    if(loginCheck == null) {
      // 不在匹配中
      return true;
    }
    // 路径匹配:
    // 1.判断是否需要拦截（ThreadLocal中是否有用户）
    if (UserHolder.getUser() == null) {
      // 没有，需要拦截
      // TODO: 统一返回格式
      BaseResponse<Void> resp = new BaseResponse<>(ErrorCode.NO_AUTH_ERROR,"未进行登录");
      String json = new ObjectMapper().writeValueAsString(resp);
      response.getWriter().write(json);
      System.out.println("json: "+json);
      // 拦截
      return false;
    }
    // 有用户，则放行
    return true;
  }

}
